using System.Data.Entity.ModelConfiguration;
using InseSoft.Models.Entities;

namespace InseSoft.Models.Mapping
{
    public class CotizacionMap : EntityTypeConfiguration<Cotizacion>
    {
        public CotizacionMap()
        {
            // Primary Key
            HasKey(t => t.Id);

            // Properties
            Property(t => t.NumPedido)
                .HasMaxLength(20);

            Property(t => t.Observacion)
                .HasMaxLength(500);

            // Table & Column Mappings
            ToTable("Cotizacion");
            Property(t => t.Id).HasColumnName("Id");
            Property(t => t.EmpresaId).HasColumnName("EmpresaId");
            Property(t => t.ClienteId).HasColumnName("ClienteId");
            Property(t => t.UsuarioId).HasColumnName("UsuarioId");
            Property(t => t.VendedorId).HasColumnName("VendedorId");
            Property(t => t.MaterialId).HasColumnName("MaterialId");
            Property(t => t.LineaId).HasColumnName("LineaId");
            Property(t => t.Fecha).HasColumnName("Fecha");
            Property(t => t.PrecioUnitario).HasColumnName("PrecioUnitario");
            Property(t => t.Subtotal).HasColumnName("Subtotal");
            Property(t => t.Porcentaje).HasColumnName("Porcentaje");
            Property(t => t.TotalUSD).HasColumnName("TotalUSD");
            Property(t => t.TotalCol).HasColumnName("TotalCol");
            Property(t => t.Cantidad).HasColumnName("Cantidad");
            Property(t => t.Montaje).HasColumnName("Montaje");
            Property(t => t.Base).HasColumnName("Base");
            Property(t => t.Altura).HasColumnName("Altura");
            Property(t => t.Tintas).HasColumnName("Tintas");
            Property(t => t.Cubrimiento).HasColumnName("Cubrimiento");
            Property(t => t.Troquel).HasColumnName("Troquel");
            Property(t => t.Doblez).HasColumnName("Doblez");
            Property(t => t.Cuatricromia).HasColumnName("Cuatricromia");
            Property(t => t.Otro).HasColumnName("Otro");
            Property(t => t.Evento).HasColumnName("Evento");
            Property(t => t.PorcEvento).HasColumnName("PorcEvento");
            Property(t => t.Aplicada).HasColumnName("Aplicada");
            Property(t => t.FecAplicada).HasColumnName("FecAplicada");
            Property(t => t.FecRegistro).HasColumnName("FecRegistro");
            Property(t => t.NumPedido).HasColumnName("NumPedido");
            Property(t => t.PrecioMaterial).HasColumnName("PrecioMaterial");
            Property(t => t.PrecioTintas).HasColumnName("PrecioTintas");
            Property(t => t.PrecioArte).HasColumnName("PrecioArte");
            Property(t => t.PrecioImpresion).HasColumnName("PrecioImpresion");
            Property(t => t.PrecioMolde).HasColumnName("PrecioMolde");
            Property(t => t.PrecioCorte).HasColumnName("PrecioCorte");
            Property(t => t.PrecioPositivo).HasColumnName("PrecioPositivo");
            Property(t => t.PrecioSolvente).HasColumnName("PrecioSolvente");
            Property(t => t.Rendimiento).HasColumnName("Rendimiento");
            Property(t => t.Laminas).HasColumnName("Laminas");
            Property(t => t.Observacion).HasColumnName("Observacion");
            Property(t => t.TipoCambioId).HasColumnName("TipoCambioId");
            Property(t => t.DivLargo).HasColumnName("DivLargo");
            Property(t => t.DivAncho).HasColumnName("DivAncho");

            // Relationships
            HasOptional(t => t.Cliente)
                .WithMany(t => t.Cotizaciones)
                .HasForeignKey(d => d.ClienteId);
            HasRequired(t => t.Empresa)
                .WithMany(t => t.Cotizaciones)
                .HasForeignKey(d => d.EmpresaId);
            HasOptional(t => t.Linea)
                .WithMany(t => t.Cotizaciones)
                .HasForeignKey(d => d.LineaId);
            HasOptional(t => t.Material)
                .WithMany(t => t.Cotizacions)
                .HasForeignKey(d => d.MaterialId);
            HasOptional(t => t.Usuario)
                .WithMany(t => t.Cotizacions)
                .HasForeignKey(d => d.UsuarioId);
            HasOptional(t => t.Vendedor)
                .WithMany(t => t.Cotizaciones)
                .HasForeignKey(d => d.VendedorId);
        }
    }
}
